#coding=utf-8
import random
import time

skls=["哉佩利敖光线","须佐能乎","十万伏特","焰分噬浪尺","我眼即你眼","蓝银霸皇枪","回复","无下限术式","超电磁炮","咒力拳"]
xuzuoa=False
zaiyana=False
wuxiana=False
xuzuob=False
zaiyanb=False
wuxianb=False

totalAttacka=0
totalAttackb=0
totalTreatmenta=0
totalTreatmentb=0
cnt=1

try:
    def doRandint(sd,bg,ed,c):

        random.seed(sd*c)
        return random.randint(bg,ed)

    def doRandomChoice(sd,lst,c):

        random.seed(sd*c)
        return random.choice(lst)

    def doRandomHide(sd,c):

        random.seed(sd*c)
        return random.randint(1,10)
except Exception as E:
    print("\033[31m================随机函数定义处出现异常，程序停止运行！================\033[0m")
    print(E)
    exit()

try:
    nma=""
    rda=0
    nmb=""
    rdb=0
    nma=str(input("请输入名字1:  "))
    rda=hash(nma)
    nmb=str(input("请输入名字2:  "))
    rdb=hash(nmb)
except Exception as E:
    print("\033[31m================输入处出现异常，程序停止运行！================\033[0m")
    print(E)
    exit()

try:
    random.seed(rda)
    lfa=random.randint(100,200)
    random.seed(rdb)
    lfb=random.randint(100,200)

    print("战斗开始中，请稍等......")
    time.sleep(2)
    print("===数据初始化完成===")
    time.sleep(0.5)
    print(nma+"的初始血量为： "+str(lfa))
    print(nmb+"的初始血量为： "+str(lfb))
    time.sleep(1)
    print("")
    start="==================战斗开始=================="
    print("\033[31m%s\033[0m"%(start))
    print("")
except Exception as E:
    print("\033[31m================生命值初始化处出现异常，程序停止运行！================\033[0m")
    print(E)
    exit()

try:
    for i in range(1000):

        time.sleep(2)
        tmplfa=lfa
        tmplfb=lfb
        out=""

        #随机技能与攻击力
        skla=doRandomChoice(rda,skls,cnt)
        cnt+=1
        sklb=doRandomChoice(rdb,skls,cnt)
        cnt+=1
        atka=doRandint(rda,10,60,cnt)
        cnt+=1
        atkb=doRandint(rdb,10,60,cnt)
        cnt+=1

        #轮到A攻击的回合  
        print(" ")
        print("        =========第"+str(i+1)+"回合开始=========")

        if skla=="须佐能乎":
            out=nma+"使用了"+skla+",下一次攻击必定暴击！太牛逼了！"
            print("\033[35m%s\033[0m"%(out))
            xuzuoa=True

        elif skla=="我眼即你眼":
            out=nma+"使用了"+skla+"给予了"+nmb+"一个致盲效果，他下回的攻击必定会被闪避！太牛逼了！"
            print("\033[35m%s\033[0m"%(out))
            zaiyana=True

        elif skla=="回复":
            out=nma+"使用了"+skla+"，恢复了"+str(atka)+"点血量"
            print("\033[32m%s\033[0m"%(out))
            lfa+=atka
            totalTreatmenta+=atka

        elif skla=="无下限术式":
            out=nma+"使用了"+skla+"，下回"+nmb+"的攻对他无效！太牛逼了！"
            print("\033[34m%s\033[0m"%(out))
            wuxiana=True

        else:
            print(nma+"使用了"+skla+"，打出了"+str(atka)+"点伤害")
            time.sleep(0.5)
            hdb=doRandomHide(rdb,cnt)
            cnt+=1

            if xuzuoa:
                out="由于"+nma+"使用了须佐能乎，"+nmb+"躲闪不及，受到了暴击，承受了"+str(atka*2)+"点伤害"
                print("\033[31m%s\033[0m"%(out))
                lfb-=atka*2
                xuzuoa=False

            elif zaiyanb:
                out="由于"+nma+"使用了我眼即你眼，"+nmb+"闪避成功，只承受了"+str(atka/2)+"点伤害"
                print("\033[30m%s\033[0m"%(out))
                lfb-=atka/2
                zaiyanb=False

            elif wuxianb:
                print("但是由于"+nmb+"使用了无下限术式，所以本次攻击不奏效！")
                wuxianb=False

            else:
                nbrdm=doRandint(time.time(),1,40,cnt)
                cnt+=1
                if nbrdm==20:
                    out=nmb+"直接反弹，使"+nma+"受到了"+str(atka-10)+"点伤害！太牛逼了！"
                    print("\033[36m%s\033[0m"%(out))

                elif 1<=rdb and 3>=rdb:
                    out=nmb+"躲闪不及，受到了暴击，承受了"+str(atka*2)+"点伤害"
                    print("\033[31m%s\033[0m"%(out))
                    lfb-=atka*2

                elif 7<=rdb and 10>=rdb:
                    out=nmb+"闪避成功，只承受了"+str(atka/2)+"点伤害"
                    print("\033[30m%s\033[0m"%(out))
                    lfb-=atka/2

                else:
                    print(nmb+"受到了"+str(atka)+"点伤害")
                    lfb-=atka

        time.sleep(2)

        #统计数据
        if(tmplfb-lfb>0):
            totalAttacka+=tmplfb-lfb
        if(tmplfa-lfa>0):
            totalAttackb+=tmplfa-lfa

        #判断是否有一方倒下
        if(lfa<=0):
            print(" ")
            print(" ")
            print(" ")
            print("==================战斗结束，"+nmb+"胜利！！==================")
            print("剩余血量："+str(lfb))
            break
        if(lfb<=0):
            print(" ")
            print(" ")
            print(" ")
            print("==================战斗结束，"+nma+"胜利！！==================")
            print(">>>剩余血量："+str(lfa))
            break

        #轮到B攻击的回合    
        if sklb=="须佐能乎":
            out=nmb+"使用了"+sklb+"，下一次攻击必定暴击！太牛逼了！"
            print("\033[35m%s\033[0m"%(out))
            xuzuob=True

        elif sklb=="我眼即你眼":
            out=nmb+"使用了"+sklb+"，给予了"+nma+"一个致盲效果，他下回的攻击必定会被闪避！太牛逼了！"
            print("\033[35m%s\033[0m"%(out))
            zaiyanb=True

        elif sklb=="回复":
            out=nmb+"使用了"+sklb+"，恢复了"+str(atkb)+"点血量"
            print("\033[32m%s\033[0m"%(out))
            lfb+=atkb
            totalTreatmentb+=atkb

        elif sklb=="无下限术式":
            out=nmb+"使用了"+sklb+"，下回"+nma+"的攻对他无效！太牛逼了！"
            print("\033[34m%s\033[0m"%(out))
            wuxianb=True

        else:
            print(nmb+"使用了"+sklb+"，打出了"+str(atkb)+"点伤害")
            time.sleep(0.5)
            hda=doRandomHide(rda,cnt)
            cnt+=1

            if xuzuob:
                out="由于"+nma+"使用了须佐能乎，"+nma+"躲闪不及，受到了暴击，承受了"+str(atkb*2)+"点伤害"
                print("\033[31m%s\033[0m"%(out))
                lfa-=atkb*2
                xuzuob=False

            elif zaiyana:
                out="由于"+nmb+"使用了我眼即你眼，"+nma+"闪避成功，只承受了"+str(atkb/2)+"点伤害"
                print("\033[30m%s\033[0m"%(out))
                lfa-=atkb/2
                zaiyana=False

            elif wuxiana:
                print("但是由于"+nma+"使用了无下限术式，所以本次攻击不奏效！")
                wuxiana=False

            else:
                nbrdm=doRandint(time.time(),1,40,cnt)
                cnt+=1
                if nbrdm==20:
                    out=nma+"直接反弹，使"+nmb+"受到了"+str(atkb-10)+"点伤害！太牛逼了！"
                    print("\033[36m%s\033[0m"%(out))

                elif 1<=rda and 3>=rda:
                    out=nma+"躲闪不及，受到了暴击，承受了"+str(atkb*2)+"点伤害"
                    print("\033[31m%s\033[0m"%(out))
                    lfa-=atkb*2

                elif 7<=rda and 10>=rda:
                    out=nma+"闪避成功，只承受了"+str(atkb/2)+"点伤害"
                    print("\033[30m%s\033[0m"%(out))
                    lfa-=atkb/2

                else:
                    print(nma+"受到了"+str(atkb)+"点伤害")
                    lfa-=atkb

        time.sleep(2)

        #统计数据
        if(tmplfb-lfb>0):
            totalAttacka+=tmplfb-lfb
        if(tmplfa-lfa>0):
            totalAttackb+=tmplfa-lfa

        #判断是否有一方倒下
        if(lfa<=0):
            print(" ")
            print(" ")
            print(" ")
            out="==================战斗结束，"+nmb+"胜利！！=================="
            print("\033[33m%s\033[0m"%(out))
            print("                  剩余血量："+str(lfb))
            break
        if(lfb<=0):
            print(" ")
            print(" ")
            print(" ")
            out="==================战斗结束，"+nma+"胜利！！=================="
            print("\033[33m%s\033[0m"%(out))
            print("                  剩余血量："+str(lfa))
            break

        #结算本回合
        print("        =========第"+str(i+1)+"回合结束=========")
        print(" ")
        time.sleep(0.5)
        print(nma+">>>剩余血量："+str(lfa))
        print(nmb+">>>剩余血量："+str(lfb))
except Exception as E:
    print("\033[31m================对战处出现异常，程序停止运行！================\033[0m")
    print(E)
    exit()

try:
    #结算画面
    print("结算中......")
    time.sleep(3)
    print(nma+"总治疗量："+str(totalTreatmenta))
    print(nmb+"总治疗量："+str(totalTreatmentb))
    print(nma+"总造成伤害："+str(totalAttacka))
    print(nmb+"总造成伤害："+str(totalAttackb))
    print("总回合数:"+str(i+1))
    print(" ")
except Exception as E:
    print("\033[31m================结算处出现异常，程序停止运行！================\033[0m")
    print(E)
    exit()
